﻿//Copyright 2008 Kristian Gundry And Rune Juhl-Petersen
//This file is part of Plain.

//Plain is free software: you can redistribute it and/or modify
//it under the terms of the GNU Lesser General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//any later version.

//Plain is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU Lesser General Public License for more details.

//You should have received a copy of the GNU Lesser General Public License
//along with Plain.  If not, see <http://www.gnu.org/licenses/>.using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Plain.Data;

namespace Plain.Utilities.Reflection {
    public class DaoReflector {
        public static Object GetDao(IDaoFactory daoFactory, Type entityType, Type entityIdType) {
            object Dao = null;
            Type dft = daoFactory.GetType();
            MethodInfo[] methods = dft.GetMethods();
            MethodInfo g = null;
            foreach (MethodInfo m in methods) {
                if (m.Name == "GetDao" && m.IsGenericMethod) {
                    g = m.MakeGenericMethod(entityType, entityIdType);
                    break;
                }
            }
            if (g != null)
                Dao = g.Invoke(daoFactory, null);
            return Dao;
        }

        public static MethodInfo GetDaoMethod(string methodName, IDaoFactory daoFactory, Type entityType, Type entityIdType) {
            Object Dao = GetDao(daoFactory, entityType, entityIdType);
            Type dt = Dao.GetType();
            MethodInfo dm = dt.GetMethod(methodName);

            return dm;
        }
    }
}